#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>

int main()
{
    //创建一个TCP套接字
    int tcp_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (tcp_fd == -1)
    {
        perror("连接失败！\n");
        return -1;
    }
    printf("连接成功！\n");

    //准备协议
    struct sockaddr_in seraddr, conaddr; //定义ipv4地址结构体的变量
    bzero(&conaddr, sizeof(conaddr));
    bzero(&seraddr, sizeof(seraddr)); //清空结构体

    seraddr.sin_family = AF_INET;                         //选择协议
    seraddr.sin_port = htons(50000);                      //确定端口
    seraddr.sin_addr.s_addr = inet_addr("192.168.10.11"); //绑定服务器的ip

    //绑定服务器端口和ip
    int ret = bind(tcp_fd, (struct sockaddr *)&seraddr, sizeof(seraddr));
    if (ret == -1)
    {
        perror("绑定失败！\n");
        return -1;
    }

    //设置监听，最大实时连接数
    ret = listen(tcp_fd, 2);
    if (ret == -1)
    {
        perror("监听失败！\n");
        return -1;
    }

    socklen_t len = sizeof(conaddr);
    //等待连接
    int connfd = accept(tcp_fd, (struct sockaddr *)&conaddr, &len);
    if (connfd == -1)
    {
        perror("连接客户端失败！\n");
        return -1;
    }

    printf("连接客户端成功！\n");
    printf("对端ip和端口：<%s> <%u>\n", inet_ntoa(conaddr.sin_addr), ntohs(conaddr.sin_port));

    char buf[100];
    while (1)
    {
        bzero(buf, 100);
        if (read(connfd, buf, sizeof(buf)) == 0) //从当前连接成功的套接字读取数据
        {
            break;
        }
        printf("客户端传来的信息:%s\n", buf);
    }
    //释放资源
    close(connfd);
    close(tcp_fd);

    return 0;
}
